package fr.dauphine.bookstore.frontoffice;

import javax.servlet.http.HttpSession;

import fr.dauphine.bookstore.modele.Order;
import fr.dauphine.bookstore.modele.User;

/**
 * Front office SessionUtil.
 */
public final class SessionUtil {

	/**
	 * Utilisateur connecte.
	 */
	private static final String SESSION_USER_KEY = "SESSION_FRONT_OFFICE_USER";

	/**
	 * Utilisateur en cours d'inscription.
	 */
	private static final String SESSION_USER_INSCRIPTION_KEY = "SESSION_FRONT_OFFICE_USER_INSCRIPTION";

	/**
	 * Utilisateur en cours d'edition.
	 */
	private static final String SESSION_USER_EDITION_KEY = "SESSION_FRONT_OFFICE_USER_EDITION";

	/**
	 * Commande en cours.
	 */
	private static final String SESSION_ORDER_KEY = "SESSION_FRONT_OFFICE_ORDER";

	/**
	 * Constructeur prive.
	 */
	private SessionUtil() {
	}

	/**
	 * Retourne l'utilisateur connecte depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Utilisateur connecte
	 */
	public static User getUser(final HttpSession session) {
		return (User) session.getAttribute(SESSION_USER_KEY);
	}

	/**
	 * Met a jour l'utilisateur connecte dans la session.
	 * 
	 * @param session
	 *            Session
	 * @param user
	 *            Utilisateur connecte
	 */
	public static void setUser(final HttpSession session, final User user) {
		session.setAttribute(SESSION_USER_KEY, user);
	}

	/**
	 * Retire l'utilisateur connecte de la session.
	 * 
	 * @param session
	 *            Session
	 */
	public static void removeUser(final HttpSession session) {
		session.removeAttribute(SESSION_USER_KEY);
	}

	/**
	 * Retourne l'utilisateur en cours d'inscription depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Utilisateur en cours d'inscription
	 */
	public static User getUserInscription(final HttpSession session) {
		return (User) session.getAttribute(SESSION_USER_INSCRIPTION_KEY);
	}

	/**
	 * Met a jour l'utilisateur en cours d'inscription dans la session.
	 * 
	 * @param session
	 *            Session
	 * @param user
	 *            Utilisateur en cours d'inscription
	 */
	public static void setUserInscription(final HttpSession session, final User user) {
		session.setAttribute(SESSION_USER_INSCRIPTION_KEY, user);
	}

	/**
	 * Retire l'utilisateur en cours d'inscription de la session.
	 * 
	 * @param session
	 *            Session
	 */
	public static void removeUserInscription(final HttpSession session) {
		session.removeAttribute(SESSION_USER_INSCRIPTION_KEY);
	}

	/**
	 * Retourne l'utilisateur en cours d'edition depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Utilisateur en cours d'edition
	 */
	public static User getUserEdition(final HttpSession session) {
		return (User) session.getAttribute(SESSION_USER_EDITION_KEY);
	}

	/**
	 * Met a jour l'utilisateur en cours d'edition dans la session.
	 * 
	 * @param session
	 *            Session
	 * @param user
	 *            Utilisateur en cours d'edition
	 */
	public static void setUserEdition(final HttpSession session, final User user) {
		session.setAttribute(SESSION_USER_EDITION_KEY, user);
	}

	/**
	 * Retire l'utilisateur en cours d'edition de la session.
	 * 
	 * @param session
	 *            Session
	 */
	public static void removeUserEdition(final HttpSession session) {
		session.removeAttribute(SESSION_USER_EDITION_KEY);
	}

	/**
	 * Retourne la commande en cours depuis la session.
	 * 
	 * @param session
	 *            Session
	 * @return Commande en cours
	 */
	public static Order getOrder(final HttpSession session) {
		return (Order) session.getAttribute(SESSION_ORDER_KEY);
	}

	/**
	 * Met a jour la commande en cours dans la session.
	 * 
	 * @param session
	 *            Session
	 * @param order
	 *            Commande en cours
	 */
	public static void setOrder(final HttpSession session, final Order order) {
		session.setAttribute(SESSION_ORDER_KEY, order);
	}

	/**
	 * Retire la commande en cours de la session.
	 * 
	 * @param session
	 *            Session
	 */
	public static void removeOrder(final HttpSession session) {
		session.removeAttribute(SESSION_ORDER_KEY);
	}
}
